package main // 声明当前包为main包，可执行程序必须在main包下

import (
	"encoding/json" // 导入json处理包，用于结构体与json数据的相互转换
	"fmt"           // 导入格式化输入输出包，用于打印信息到控制台
)

// 定义User结构体，用于存储用户的基本信息
type User struct {
	// Name字段：存储用户姓名
	// 结构体标签`json:"name"`表示json序列化时该字段对应键名为"name"
	Name string `json:"name"`
	// Age字段：存储用户年龄
	// 结构体标签`json:"age,omitempty"`表示json序列化时键名为"age"，
	// 且当Age为0值（int类型0值为0）时会忽略该字段
	Age int `json:"age,omitempty"`
	// Password字段：存储用户密码
	// 结构体标签`json:"-"`表示该字段不参与json序列化（序列化结果中不会出现该字段）
	Password string `json:"-"`
}

func main() { // 程序入口函数，程序从这里开始执行
	// 创建User结构体实例，并为字段赋值
	// Name赋值为"枫枫"，Age赋值为24，Password赋值为"123123"
	user := User{Name: "枫枫", Age: 24, Password: "123123"}

	// 调用json.Marshal函数将User结构体实例序列化为json格式的字节切片
	// 序列化过程会根据结构体字段的tag规则处理：
	// - Name字段会转为"name":"枫枫"
	// - Age字段会转为"age":24
	// - Password字段因tag为`json:"-"`会被忽略
	// 这里忽略了错误处理（实际开发中建议处理错误）
	byteData, _ := json.Marshal(user)

	// 将序列化得到的字节切片转换为字符串，并通过fmt.Println打印
	// 最终输出结果为：{"name":"枫枫","age":24}
	fmt.Println(string(byteData))
}
